package com.haierp.mapper;

import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.mapper.AutoMapper;
import com.haierp.model.ErpOrder;
import com.haierp.model.Inventory;

/**
 * Inventory 数据控制层
 * 
 * @author liuhui
 *
 */
public interface InventoryMapper extends AutoMapper<Inventory> {

	/**
	 * 根据skuId
	 * 
	 * @param itemId
	 * @param skuId
	 * @return
	 */
	Inventory getInventoryBySkuId(@Param("itemId") Long itemId,@Param("skuId")  Long skuId);
	
	/**
	 * 根据skuId 加悲观锁
	 * 
	 * @param itemId
	 * @param skuId
	 * @return
	 */
	//Inventory getInventoryBySkuIdLock(@Param("itemId") Long itemId,@Param("skuId")  Long skuId);
	
	int updateLockInventory(@Param("id") Long id ,@Param("booked") int booked,@Param("transBooked") int transBooked);
	
	void updateInventoryByInventoryArea();
	
	/**
	 * 
	 * @param id 主键
	 * @param toTrans 在途入仓的数量
	 * @param lockedTransInv 入仓时的在途锁定数量，用来防止并发数据过期
	 * @return
	 */
	int updateTransToInventory(@Param("itemId") Long itemId,@Param("skuId")  Long skuId, @Param("toTrans")int toTrans, @Param("lockedTransToInv")int lockedTransToInv,  @Param("lockedTransInv")int lockedTransInv);

	/**
	 * 删除sku时，根据删除库存记录
	 */
	void deleteInventoryBySkuId(@Param("skuId") Long skuId);
	
	/**
	 * 减库存盘点
	 * 
	 * @param id
	 * @param inventory
	 * @param toCheck
	 * @return
	 */
	int updateInventoryCheck(@Param("id")Long id , @Param("inventory")int inventory, @Param("toCheck")int toCheck);
	
	/**
	 * 减在途库存盘点
	 * 
	 * @param id
	 * @param transInv
	 * @param toCheck
	 * @return
	 */
	int updateInventoryTransCheck(@Param("id")Long id , @Param("transInv")int transInv, @Param("toCheck")int toCheck);
	
	void updateUpcForInventory(ErpOrder erpOrder);
	
	void updateVirtualInvByItemId(Long itemId);
	
	/**
	 * 盘出在途库存但不放入实际库存中
	 * @param id
	 * @param transInv
	 * @param toCheck
	 * @return
	 */
	int updateInventoryTransNotoInv(@Param("id")Long id , @Param("transInv")int transInv, @Param("toCheck")int toCheck);
}
